<?php
class Autenticacao extends Zend_Db_Table{
	protected $_primary= array('id_acesso', 'nr_via');
	protected $_name   = 'autenticacao_evento';

	//Gerar código acesso
	private $aux_nr_via;
	public $id_categoria_acesso;

	function __construct(){
		parent::__construct();
		$this->id_acesso =null;
		$this->nr_via	 =null;
		$this->cd_acesso =null;
		$this->in_ativo  =null;
		$this->dt_criacao=null;
		$this->id_usuario=null;
	}

	public function excluir($id){
    	$where = "id_acesso=".$id;
    	$this->delete($where);
	}

	function salvar(){
		$this->invalidarViasAnteriores();
		$dados = array('id_acesso'	=>$this->id_acesso,
				 	   'nr_via'		=>is_null($this->nr_via) ? $this->generateVia() : $this->nr_via,
					   'cd_acesso'	=>is_null($this->cd_acesso) ? $this->generateBarCode() : $this->cd_acesso,
					   'in_ativo' 	=>$this->in_ativo,
					   'dt_criacao'	=>$this->dt_criacao,
    				   'id_usuario'	=>$this->id_usuario);
  		$this->insert($dados);
	}

	private function invalidarViasAnteriores(){
		$dados = array('in_ativo' => "0");
		$where = "id_acesso = " . $this->id_acesso;
		$this->update($dados, $where);
	}

	private function populate($row){
		$this->id_acesso	=$row['id_acesso'];
		$this->nr_via		=$row['nr_via'];
		$this->cd_acesso	=$row['cd_acesso'];
		$this->in_ativo		=$row['in_ativo'];
		$this->dt_criacao	=$row['dt_criacao'];
		$this->id_usuario	=$row['id_usuario'];
	}

	function load($id, $via){
		$row = $this->find(array($id, $via))->current();
		$this->populate($row);
	}

	function loadAtivo($id){
		$db = Zend_Registry::get('db');
		$sql='select id_acesso,
					 nr_via,
					 cd_acesso,
					 in_ativo,
					 dt_criacao,
					 id_usuario
			    from autenticacao_evento
			   where id_acesso='.$id.'
			     and in_ativo=1';
		$row = $db->query($sql)->fetch();
		if (count($row)>0){
		 	$this->populate($row);
		}
	}

	function loadAutenticacao($barCode){
		$row = $this->buscar(null, $barCode, 0);
		$this->populate($row);
	}

	function buscar($id_acesso, $cd_acesso="", $in_ativo='1'){
		$db = Zend_Registry::get('db');
		$sql='select id_acesso,
					 nr_via,
					 cd_acesso,
					 in_ativo,
					 dt_criacao,
					 id_usuario
			    from autenticacao_evento
			   where 1 = 1';
		if ($id_acesso>0){
			$sql.=' and id_acesso='.$id_acesso;
		}
		if ($cd_acesso!=null){
			$sql.=" and cd_acesso='".$cd_acesso."'";
		}
		if ($in_ativo==1){
			$sql .=' and in_ativo='.$in_ativo;
		}
		$sql .='  order by 1, 2';
		if ($cd_acesso!=null){
			return $db->query($sql)->fetch();
		}
		return $db->query($sql)->fetchAll();
	}

	function generateBarCode(){
		$nr_via=is_null($this->nr_via) ? $this->aux_nr_via : $this->nr_via;
		if ($nr_via==null){
			die("Número da via nulo.");
		}
		$barCode =str_pad($this->id_acesso, 5, "0", STR_PAD_LEFT).str_pad($this->id_categoria_acesso, 2, "0", STR_PAD_LEFT).str_pad($nr_via, 2, "0", STR_PAD_LEFT);
		$barCode.=$this->generateValidateCode($barCode);
		$this->cd_acesso=$barCode;
		return $barCode;
	}

	public function generateVia(){
		if ($this->id_acesso==null){
			die("Id acesso nulo.");
		}
		$db = Zend_Registry::get('db');
		$sql='select ifnull(max(nr_via),0)+1 nr_via
			    from autenticacao_evento
			   where id_acesso='.$this->id_acesso;
		$row=$db->query($sql)->fetch();
		echo $row['nr_via'];

		$this->aux_nr_via=$row['nr_via'];
		return $this->aux_nr_via;
	}

	private function generateValidateCode($barCode){
		return 99;
	}
}